﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <string.h>
//char* my_strcat(char* dest, const char* src) {
//	char* ret = dest;
//	assert(dest);
//	assert(src);
//	while (*dest != '\0')
//	{
//		dest++;
//	}
//	while (*dest++ = *src++)
//	{
//		;//空语句
//	}
//	return ret;
//}
//int main() {
//	char arr1[] = "abcdef";
//	char arr2[] = "world";
//
//	char* ret = my_strcat(arr1, arr1);
//	printf("%s", ret);
//	return 0;
//}

//strcmp()函数的模拟实现
//int my_strcmp(const char* str1,const char* str2) {
//	assert(str1);
//	assert(str2);
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//		{
//			return 0;
//		}
//		str1++;
//		str2++;
//	}
//	return *str1 - *str2;
//}
//int my_strcmp(char* str1, char* str2) {
//	assert(str1 && str2);
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0') {
//			printf("没法比\n");
//		}
//		str1++;
//		str2++;
//	}
//	if (*str1 > *str2)
//	{
//		return 1;
//	}
//	else if (*str1 == *str2)
//	{
//		return 0;
//	}
//	else
//	{
//		return -1;
//	}
//}


//int main() {
//	char arr1[] = "abq";
//	char arr2[] = "abcdef";
//	int ret = my_strcmp(arr1, arr2);
//	printf("%d\n", ret);
//	return 0;
//}


//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[20] = "xxxxxxxxxx";
//	strncpy(arr2, arr1, 9);
//	printf("%s\n", arr2);
//
//	return 0;
//}


//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[20] = "xx\0xxxxxxxxxx";
//	int len = strlen(arr1);
//	strncat(arr2, arr1, len + 1);
//
//	printf("%s\n", arr2);
//
//	return 0;
//}


//int main()
//{
//	char arr1[] = "accdef";
//	char arr2[] = "abqdefghi";
//	int ret = strncmp(arr1, arr2, 2);
//	printf("%d\n", ret);
//
//	return 0;
//}


////越界访问
//int main()
//{
//	char arr1[10] = "abcdef";
//	char arr2[] = "abqdefghiqqq";
//	strcpy(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}

//int main()
//{
//	char arr1[] = "this is an apple\n";
//	//const char* p = "Appl";
//	char arr2[] = "is";
//	char* ret = strstr(arr1, arr2);
//
//	if (ret != NULL)
//	{
//		printf("%s\n", ret);
//	}
//	else
//	{
//		printf("找不到\n");
//	}
//
//	return 0;
//}

//strstr()函数的模拟实现
//char* my_strstr(const char* str1, const char* str2) {
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	const char* cur = str1;
//	if (*str2 == '\0')//空字符串
//	{
//		return (char*)str1;
//	}
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = str2;
//		while (*s1!='\0' && *s1 == *s2 && *s2 != '\0')
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//		{
//			return (char*)cur;
//		}
//		cur++;
//	}
//	return NULL;
//}
//int main() {
//	char arr1[] = "abcdefabcdef";
//	char arr2[] = "cdef";
//	char* ret = my_strstr(arr1, arr2);
//	if (ret != NULL)
//	{
//		printf("%s\n", ret);
//	}
//	else
//	{
//		printf("没有找到\n");
//	}
//	return 0;
//}



//int main()
//{
//	char arr[] = "zpengwei@yeah.net@hehe";
//	char arr2[30] = { 0 };//"zpengwei\0yeah\0net"
//	strcpy(arr2, arr);
//	const char* sep = "@.";
//	char* ret = NULL;
//
//	for (ret = strtok(arr2, sep); ret != NULL; ) 
//	{
//		printf("%s\n", ret);
//		ret = strtok(NULL, sep);
//	}

	//ret = strtok(arr2, sep);//zpengwei\0
	//printf("%s\n", ret);

	//ret = strtok(NULL, sep);//yeah\0
	//printf("%s\n", ret);

	//ret = strtok(NULL, sep);//net\0
	//printf("%s\n", ret);

	//ret = strtok(NULL, sep);//hehe\0
	//printf("%s\n", ret);

	//ret = strtok(NULL, sep);//null
	//printf("%s\n", ret);
//	return 0;
//}



//for (ret = strtok(arr2, sep); ret != NULL; ret=strtok(NULL, sep))
//{
//	printf("%s\n", ret);
//}
//


//我们打印⼀下0~10这些错误码对应的信息
//int main()
//{
//	int i = 0;
//	for (i = 0; i <= 10; i++)
//	{
//		printf("%d:    %s\n", i, strerror(i));
//	}
//
//	return 0;
//}

int main()
{
	//fopen以读的形式打开文件的时候，如果文件不存在，就打开失败
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("zhangsan");
		return 1;
	}
	//读文件

	//关闭文件
	fclose(pf);

	return 0;
}